Skip to content

实现 reduce foreach

reduce

js
const arr = [1, 2, 3, 4, 5];
const sum = arr.reduce((prev, next) => {
  return prev + next;
}, 0);
// console.log(sum);

Array.prototype._reduce = function (fn, before) {
  const arr = this;
  let prev = before;
  for (var i = 0; i < arr.length; i++) {
    prev = fn(prev, arr[i]);
  }
  return prev;
};

const mySum = arr._reduce((prev, next) => {
  return prev + next;
}, 0);
console.log(mySum);

forEach

js
const arr = [1, 2, 3, 4, 5];

Array.prototype._forEach = function (fn) {
  const arr = this;
  for (var i = 0; i < arr.length; i++) {
    fn(arr[i], i);
  }
};

arr._forEach((item, index) => {
  console.log(item);
});

forEach与for循环,谁的性能更好

forEach 不是普通的 for 语法糖,还有诸多参数和上下文需要在执行的时候考虑进来,这里可能拖慢性能;

在1000万级以上的量级上 , forEach 的性能远远低于for的性能 for: 8.422ms forEach: 30.328m

js
let arrs = new Array(100000);

console.time('for');
for (let i = 0; i < arrs.length; i++) {

};
console.timeEnd('for');

console.time('forEach');
	
arrs.forEach((arr) => {
 
});
console.timeEnd('forEach');
for: 2.263ms
forEach: 0.254ms

在 MIT 许可下发布